package com.liuhuxiang.order;

import com.liuhuxiang.ribbon.RibbonRandomRuleConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * 订单的启动类
 *
 * @author liuhuxiang
 * @version: OrderApplication.java, 2023年02月27日 下午12:27 liuhuxiang  Exp $
 */
//让它作为Springboot启动类
@SpringBootApplication

//启动Naco客户端，可以加，也可以不加，Nacos高版本默认会启动的
//@EnableDiscoveryClient

/* 局部配置：在配置文件中配置，所以这里要注释掉
//在启动类中，指定一个负载均衡的策略
@RibbonClients(value = {
        //name就是服务提供方，你要为哪个服务提供方提供负载均衡策略，但是我们这里只有一个stock-service
        //另外，如果你的RibbonRandomRuleConfig写在了liuhuxiang包下或者order包下，这里即便为多个服务提供方设置了不同的负载均衡策略，也不会生效
        @RibbonClient(name="stock-service",configuration = RibbonRandomRuleConfig.class)
})
*/

public class OrderApplication {
    public static void main(String[] args) {

        //把类 和 参数args都传进去
        SpringApplication.run(OrderApplication.class, args);
    }

    /***
     * 通过构造器构建一个restTemplate
     * @param builder
     * @return
     */
    @Bean
    //必须借助负载均衡器，nacos才能实现跨服务的调用
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }
}